package com.scc.generate.word.frame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.scc.generate.word.generator.DocConfig;
import com.scc.generate.word.generator.DocGenerator;

import cn.smallbun.screw.core.engine.EngineFileType;

/**
 * @ClassName: ButtonAction
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author javascc@126.com
 * @date 2023年3月31日 下午2:36:25
 * 
 */
public class ButtonAction implements ActionListener {

	/*
	 * (非 Javadoc) <p>Title: actionPerformed</p> <p>Description: </p>
	 * 
	 * @param e
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		PanelInitUtil.INFOJTEXTAREA.append("------------------开始生成------------------");
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的驱动：");
		String driver = PanelInitUtil.DEFAULT_DRIVEROPTIONS[PanelInitUtil.DRIVERCOMBOBOX.getSelectedIndex()];
		PanelInitUtil.INFOJTEXTAREA.append(driver);
		if (null == driver || "".equals(driver)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置驱动！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的URL：");
		String url = PanelInitUtil.URLTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(url);
		if (null == url || "".equals(url)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置URL！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的用户名：");
		String uname = PanelInitUtil.UANMETEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(uname);
		if (null == uname || "".equals(uname)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置用户名！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的密码：");
		String pwd = PanelInitUtil.PASSWORDTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(pwd);
		if (null == pwd || "".equals(pwd)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置密码！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的文件输出位置：");
		String filePath = PanelInitUtil.FILEPATHTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(filePath);
		if (null == filePath || "".equals(filePath)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置文件输出位置！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的忽略表名：");
		String ignoreTableName = PanelInitUtil.FILEPATHTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(ignoreTableName);
		List<String> ignoreTableNamelList = new ArrayList<>();
		if (null != ignoreTableName && !"".equals(ignoreTableName)) {
			ignoreTableNamelList.addAll(Arrays.asList(ignoreTableName.split(",")));
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的忽略表名前缀：");
		String ignorePrefix = PanelInitUtil.FILEPATHTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(ignorePrefix);
		List<String> ignorePrefixList = new ArrayList<>();
		if (null != ignorePrefix && !"".equals(ignorePrefix)) {
			ignorePrefixList.addAll(Arrays.asList(ignorePrefix.split(",")));
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的忽略表名后缀：");
		String ignoreSuffix = PanelInitUtil.FILEPATHTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(ignoreSuffix);
		List<String> ignoreSuffixList = new ArrayList<>();
		if (null != ignoreSuffix && !"".equals(ignoreSuffix)) {
			ignoreSuffixList.addAll(Arrays.asList(ignoreSuffix.split(",")));
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的文档名称：");
		String name = PanelInitUtil.NAMETEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(name);
		if (null == name || "".equals(name)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置文档名称！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的文档版本号：");
		String version = PanelInitUtil.VERSIONTEXTFIELD.getText();
		PanelInitUtil.INFOJTEXTAREA.append(version);
		if (null == version || "".equals(version)) {
			PanelInitUtil.INFOJTEXTAREA.append("ERROR:未配置版本号！");
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的文档类型：");
		String engineFileType = PanelInitUtil.DEFAULT_ENGINEFILETYPES[PanelInitUtil.ENGINEFILETYPECOMBOBOX
				.getSelectedIndex()];
		PanelInitUtil.INFOJTEXTAREA.append(engineFileType);
		if (engineFileType.equals("HTML文件")) {
			engineFileType = "HTML";
		} else if (engineFileType.equals("WORD文件")) {
			engineFileType = "WORD";
		} else {
			engineFileType = "MD";
		}
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.append("配置的是否生成后打开文档：");
		String isOpend = PanelInitUtil.DEFAULT_ISOPENDS[PanelInitUtil.ISOPENDSCOMBOBOX.getSelectedIndex()];
		PanelInitUtil.INFOJTEXTAREA.append(isOpend);
		PanelInitUtil.INFOJTEXTAREA.append("\r\n");
		PanelInitUtil.INFOJTEXTAREA.setCaretPosition(PanelInitUtil.INFOJTEXTAREA.getText().length());
		try {
			DocConfig docConfig = new DocConfig(driver, url, uname, pwd, filePath, ignoreTableNamelList,
					ignorePrefixList, ignoreSuffixList, ("打开".equals(isOpend) ? true : false),
					EngineFileType.valueOf(engineFileType), name, version);
			new DocGenerator().generate(docConfig);
		} catch (Exception ec) {
			PanelInitUtil.INFOJTEXTAREA.append(getErrorInfoFromException(ec));
		}
		PanelInitUtil.INFOJTEXTAREA.append("------------------生成完成------------------");

	}

	public static String getErrorInfoFromException(Exception e) {
		StringWriter sw = new StringWriter();
		try (PrintWriter pw = new PrintWriter(sw);) {
			e.printStackTrace(pw);
		}
		return sw.toString();

	}
}
